#include <iostream>
#include<string.h>

using namespace std;
class array{
    public :
        array(); 
        array(int x);
        array(const array &p);
        ~array();
        
        //添加
        void add1(int x);//在数组末尾添加一个元素
        void add2(int l,int a[]);//在数组末尾添加一个长度为k的元素数组
        //修改
        void modify(int k,int x);//修改数组中位置为k的元素，赋值为x
        //删除
        void delete1(int k);//删除数组位置为k的一个元素
        void delete2(int k,int l);//删除数组位置为k的l个元素
        //访问
        int getdata(int i){return this->shuzu[i];}//访问数组i位置的元素
        int getlen1(){return this->len1;}//访问数组的实际长度
        void show();//输出数组所有元素
    private :
        int len;//数组长度
        int len1;//有效数据长度
        int *shuzu;//数组指针
};

array::array()
{
    len = 0;
    len1 = 0;
    shuzu = new int[len];
}
array::array(int x){
    if(x==0) shuzu = NULL;
    else{
        len = x;
        len1 = 0;
        shuzu = new int[x];
    }
} 
array::array(const array &p){
    len = p.len;
    len1 = p.len1;
    memcpy(shuzu,p.shuzu,sizeof(int)*p.len1);
}         
array::~array(){
    delete []shuzu;
}

void array::add1(int x){
    if(!shuzu)  cout<<"添加非法"<<endl;
    else
        shuzu[len1++] = x;
}
void array::add2(int l,int a[]){
    if(!a) cout<<"添加非法"<<endl;
    if(l+len1>len)
        cout<<"添加非法"<<endl;
    else{
        int i;
        for(i=len1;i<len1+l;i++)
            shuzu[i] = a[i-len1];
        len1 = len1+l;
    }
}

void array::modify(int k,int x){
    if(k>len1) cout<<"修改非法"<<endl;
    shuzu[k] = x;
}

void array::delete1(int x){
    if(x>len1) cout<<"删除非法"<<endl;
    int i;
    for(i=x;i<len1-1;i++)
        shuzu[i]=shuzu[i+1];
    len1--;
}
void array::delete2(int k,int l){
    if(l+k>len1) cout<<"删除非法"<<endl;
    int i;
    for(i=l;i<len1-l;i++)
        shuzu[i]=shuzu[i+l];
    len1 = len1-l;
}

void array::show(){
    int i;
    cout<<this->len1<<endl;
    for(i=0;i<this->len1;i++)
        cout<<this->shuzu[i]<<" ";
    cout<<endl;
}

int main()
{
    array a(15);
    a.add1(1);
    a.add1(2);
    a.add1(3);
    a.show();
    int t[5]={1,2,3,4,5};
    a.add2(5,t);
    a.show();
    a.modify(5,5);
    a.show();
    a.delete1(5);
    a.show();
    a.delete2(2,3);
    a.show();
    array b(15);
    b=a;
    cout<<"b数组:"<<endl;
    b.show();
    return 0;
}